"""
同时翻译多语言
1. 建立大模型对象
2. 创建消息提示词模板
3. 创建基本的翻译链，单一的链来封装逻辑(并行链的每一个链运行这个基本链)  base_chain = template | llm | StrOutputParser()
4. 定义并行链 ,并行链定义RunnableLambda 的 lambda 来运行基链
5. 执行并行链
6. 输出结果
"""
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableLambda, RunnableParallel
from model_utils import getLLM

llm = getLLM()

#创建消息提示词模板
template = ChatPromptTemplate.from_messages([
    ("system","你是一个优秀的翻译官，将用户的信息翻译成{language}"),
    ("human","{content}")
])

parser = StrOutputParser()
#创建基本的翻译链
chain = template | llm | parser

#定义并行链
parallel_chain = RunnableParallel(
    english = RunnableLambda(lambda x:chain.invoke({"content":x["content"],"language":"英语"})),
    chinese = RunnableLambda(lambda x:chain.invoke({"content":x["content"],"language":"日语"})),
    french = RunnableLambda(lambda x:chain.invoke({"content":x["content"],"language":"法语"}))
)

#执行并行链
r = parallel_chain.invoke({"content":"我爱你"})
print(r)